/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package fonol.facades;

import fonol.entidades.Beneficiarios;
import fonol.entidades.Estados;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

/**
 *
 * @author Fredfred2
 */
@Stateless
public class BeneficiariosFacade implements BeneficiariosFacadeRemote {
    @PersistenceContext
    private EntityManager em;

    public void create(Beneficiarios beneficiarios) {
        em.persist(beneficiarios);
    }

    public void edit(Beneficiarios beneficiarios) {
        em.merge(beneficiarios);
    }

    public void remove(Beneficiarios beneficiarios) {
        em.remove(em.merge(beneficiarios));
    }

    public Beneficiarios find(Object id) {
        return em.find(fonol.entidades.Beneficiarios.class, id);
    }

    public List<Beneficiarios> findAll() {
        return em.createQuery("select object(o) from Beneficiarios as o").getResultList();
    }

    public List<Beneficiarios> findNuevos() {
        Date fechaFinal=new Date();
        GregorianCalendar cFinal=new GregorianCalendar();
        cFinal.setTime(fechaFinal);
        
        GregorianCalendar cInicio=new GregorianCalendar();
        cInicio.setTime(fechaFinal);
        cInicio.add(GregorianCalendar.MONTH, -1);
        
        Date fechaInicial=cInicio.getTime();
        
        return em.createQuery("select object(o) from Beneficiarios as o where o.fechaaceptacion between :fechaInicio and :fechaFinal").setParameter("fechaInicio", fechaInicial).setParameter("fechaFinal", fechaFinal).getResultList();
    }

    public List<Beneficiarios> findNuevosPorEstado(int estadoElegido) {
        Date fechaFinal=new Date();
        GregorianCalendar cFinal=new GregorianCalendar();
        cFinal.setTime(fechaFinal);
        
        GregorianCalendar cInicio=new GregorianCalendar();
        cInicio.setTime(fechaFinal);
        cInicio.add(GregorianCalendar.MONTH, -1);
        Date fechaInicial=cInicio.getTime();
        
        Estados estado=em.find(Estados.class, estadoElegido);
        return em.createQuery("select object(o) from Beneficiarios as o where o.fechaaceptacion between :fechaInicio and :fechaFinal and  o.candidatos.estado = :estado").setParameter("estado", estado).setParameter("fechaInicio", fechaInicial).setParameter("fechaFinal", fechaFinal).getResultList();
    }

    public List<Beneficiarios> findByEstado(Integer estadoElegido) {
        Estados estado=em.find(Estados.class, estadoElegido);
        return em.createNamedQuery("Beneficiarios.findByEstado").setParameter("estado", estado).getResultList();
    }

}
